Golang : Test floating point numbers not-a-number and infinite example
A simple example to demonstrate how to create not-a-number
and infinite
floating-point values in Golang. Will show some example tests on the values and things to watch out for in order to get the most accurate result.
Here you go!
package main
import (
"fmt"
"math"
)
func main() {
fnum := float64(12.2)
fmt.Println(fnum)
fmt.Println("Is not-a-number ? : ", math.IsNaN(fnum))
fNaN := math.NaN()
fmt.Println(fNaN)
fmt.Println("Is not-a-number ? : ", math.IsNaN(fNaN))
// test if floating-point value is infinity
fmt.Println("Is positive infinity? : ", math.IsInf(fNaN, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(fNaN, -1))
fmt.Println("Is either infinity? : ", math.IsInf(fNaN, 0))
// reference https://golang.org/pkg/math/#IsInf
fmt.Println("---------------------------------------------")
fmt.Println("Test positive infinite value")
fmt.Println("---------------------------------------------")
posInf := math.Inf(1)
posInf = posInf + 12.2 // infinite value will still propagate after add operation
fmt.Println("Symbol : ", posInf)
fmt.Println("Is positive infinity? : ", math.IsInf(posInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(posInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(posInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Watch out for operation such as 10 / posInf !!")
fmt.Println("---------------------------------------------")
posInf = 10 / posInf // HOWEVER! this will screw up the infinite
fmt.Println("Symbol : ", posInf)
fmt.Println("Is positive infinity? : ", math.IsInf(posInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(posInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(posInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Test negative infinite value")
fmt.Println("---------------------------------------------")
negInf := math.Inf(-1)
fmt.Println("Symbol : ", negInf)
fmt.Println("Is postive infinity? : ", math.IsInf(negInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(negInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(negInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Watch out for operation such as infinite / infinite !!")
fmt.Println("---------------------------------------------")
negInf = negInf / negInf // --- WILL turn infinite into NaN
fmt.Println("Symbol : ", negInf)
fmt.Println("Is postive infinity? : ", math.IsInf(negInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(negInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(negInf, 0))
}
Output:
12.2
Is not-a-number ? : false
NaN
Is not-a-number ? : true
Is positive infinity? : false
Is negative infinity? : false
Is either infinity? : false
---------------------------------------------
Test positive infinite value
---------------------------------------------
Symbol : +Inf
Is positive infinity? : true
Is negative infinity? : false
Is either infinity? : true
---------------------------------------------
Watch out for operation such as 10 / posInf !!
---------------------------------------------
Symbol : 0
Is positive infinity? : false
Is negative infinity? : false
Is either infinity? : false
---------------------------------------------
Test negative infinite value
---------------------------------------------
Symbol : -Inf
Is postive infinity? : false
Is negative infinity? : true
Is either infinity? : true
---------------------------------------------
Watch out for operation such as infinite / infinite !!
---------------------------------------------
Symbol : NaN
Is postive infinity? : false
Is negative infinity? : false
Is either infinity? : false
Happy coding!
Reference:
See also : Golang : Accurate and reliable decimal calculations
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+12.1k Golang : Clean formatting/indenting or pretty print JSON result
+9.4k Golang : Generate random Chinese, Japanese, Korean and other runes
+18.1k Golang : Login and logout a user after password verification and redirect example
+5.9k Golang : Denco multiplexer example
+15.1k Golang : How do I get the local IP (non-loopback) address ?
+6k Golang : Shuffle array of list
+18.4k Golang : Read binary file into memory
+5.9k Javascript : How to replace HTML inside <div>?
+10.5k Golang : Meaning of omitempty in struct's field tag
+6.7k Golang : Warp text string by number of characters or runes example
+13.5k Golang : error parsing regexp: invalid or unsupported Perl syntax
+9.2k Golang : Get curl -I or head data from URL example